home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / fdimg / oh!.2hd / OH!DEN_B.LZH / TOOLS / CDC / CDCSXSRC.LZH / LBSRC.LZH / EVENTPROC.HAS < prev    next >
Text File  |  1995-03-20  |  9KB  |  401 lines

  1. *
  2. *    イベント処理部
  3. *    1995.03.10
  4. *    You Utzse@電脳魔術団@Mankaiseisakujo /1993-1995
  5. *
  6.  
  7.  
  8.  
  9.  
  10.     .include    DOSCALL.MAC    *標準の奴(XC)
  11.     .include    SXCALL.MAC    *FSX Ver2.01用(シャープコンパチ)
  12.     .include    SXCALL.H    *開発キットヘッダ
  13.     .include    YOU200.MAC    *独自のマクロ定義ファイルです
  14.     .include    HASMACRO.MAC    *HAS2.5以降のマクロパッケージ
  15.     .include    WORK.INC    *ワークエリアの内容を定義するファイル
  16.     .include    FLAG.INC    *条件付アセンブル処理を定義するファイル
  17.  
  18.     .include    CDC.MAC
  19.  
  20.     .xref    ScrProc
  21.  
  22. .text
  23. *------------------------------------------------------*
  24. *●アイドルイベント処理関数●
  25. .xref    InitGraph
  26. .xref    DrawWin
  27. .xref    Timerproc
  28. *------------------------------------------------------*
  29. IDLEproc::
  30.  
  31.     move.l    #20,-(sp)    *ベースタイム
  32.     pea.l    CD_COUNTER(a5)        *現在のカウンタアドレス
  33.     SXSUB    Timerproc,8            *タイマー処理
  34.     ifmi    <tst.l    d0>
  35.         CDC    _CDC_TRACKS        *CDトラック情報を得る
  36.         move.l    d0,a0
  37.         ifeq    <tst.w    (a0)>        *CDない時
  38.             ifne    <cmp.l    #-1,Ttlargc(a5)>
  39.                 move.l    #-1,Ttlargc(a5)
  40.                 SX    __EMMSLoc,0
  41.                 move.l    d0,-(sp)
  42.                 move.l    TtlHdl(a5),-(sp)
  43. *                pea    TtlHdl(a5)        *疑似ハンドル
  44.                 move.l    Ttlargc(a5),-(sp)
  45.                 pea.l    Sc1work(a5)
  46.                 move.w    #1,-(sp)
  47.                 SXSUB    ScrProc,18
  48.             endif
  49.         else
  50.             ifeq    <cmp.l    #-1,Ttlargc(a5)>    *CDが入った瞬間
  51.                 move.l    6(a0),d0
  52.                 subq.l    #1,d0
  53.                 move.l    d0,Ttlargc(a5)        *スクロールバー用曲数変更
  54. .xref    TtlHdlInit
  55.                 jbsr    TtlHdlInit        *CDTITLE取り直し
  56.  
  57.                 jbsr    DrawWin            *描き直し
  58.                 jbsr    DrawWin2
  59.             endif
  60.         endif
  61.     endif
  62.     ~T
  63.     rts
  64. *------------------------------------------------------*
  65. *●レフトダウン時の処理
  66. *
  67. *------------------------------------------------------*
  68. MSLDproc::
  69.     tst.b    winActive(a5)            *現在ウィンドウはアクティブか?
  70.     bne    MSLD1                *アクティブならMSLD1へ
  71.  
  72.     move.w    eventRec_ShiftBit(a5),d0    *シフトキービット取得
  73.     and.l    #KS_OPT1,d0            *OPT.1キーチェック
  74.     bne    MSLD1
  75.  
  76.     Xpea    winPtr(a5)
  77.     SX    __WMSelect,4            *アクティブにして
  78.  
  79.     SX    __EMLStill,0            *マウス左は押されたまま?
  80.  
  81.     tst.l    d0
  82.     beq    MSLD9                *離されてたら
  83.  
  84.     move.l    eventRec_whom2(a5),-(sp)
  85.     SX    __WMFind,4            *レフトダウンが起きた場所が
  86.  
  87.     cmp.l    #W_INDRAG,d0
  88.     bne    MSLD9                *ドラッグリージョンかどうか
  89.  
  90. MSLD1:
  91.                         *エラーチェックずみのこと)
  92.     pea    eventRec(a5)
  93.     Xpea    winPtr(a5)            *ウィンドウ処理
  94.     SX    __SXCallWindM,8
  95.  
  96.     ifeq    <cmp.l    #W_INCLOSE,d0>        *クローズボックス?
  97.         rts
  98.     endif
  99.  
  100.     cmp.w    #W_INDESK,d0            *どこも操作されなかった?
  101.     beq    MSLD9
  102.  
  103.     cmp.w    #W_ININSIDE,d0            *ウィンドウコンテンツ外ならなにもしない
  104.     bne    MSLD9
  105.  
  106.     bsr    CtrlChk                *コントロール処理へ分岐
  107.  
  108. MSLD9
  109.     ~T
  110.     rts
  111. *------------------------------------------------------*
  112. *------------------------------------------------------*
  113. CtrlChk:
  114.         movem.l    d1-d2,-(sp)
  115.         Xpea    winPtr(a5)
  116.         move.l    now_mpt(a5),-(sp)
  117.         SX    __CMFind,8        *コントロールの上にあるか?
  118.         move.l    d0,d1            *d0=パートコード
  119.         move.l    a0,d2            *d2=cHDLスクロールバーが複数なら
  120.                         *これも使って分岐判定する
  121.         moveq    #0,d0
  122.  
  123.     ifge <cmpi.w #20,d1>            *スクロールバーか
  124.  
  125.         move.w    d1,-(sp)        *パートコード
  126.         move.l    now_mpt(a5),-(sp)        *ローカル座標
  127.         move.l    TtlHdl(a5),-(sp)    *文字列のハンドル
  128. *        pea.l    TtlHdl(a5)        *疑似ハンドル
  129.         move.l    Ttlargc(a5),-(sp)    *要素数-1
  130.         pea.l    Sc1work(a5)        *スクロールバー構造体のアドレス
  131.         move.w    #2,-(sp)
  132.         SXSUB    ScrProc,20
  133.     elseifeq <cmpi.w #C_INBTTN,d1>
  134.         move.l    #0,-(sp)    *pea    0.w
  135.         move.l    now_mpt(a5),-(sp)
  136.         move.l    d2,-(sp)
  137.         SX    __CMCheck,12
  138.  
  139.         ifeq    <cmpi.w    #C_INBTTN,d0>
  140.             ifeq    <cmp.l b1Hdl(a5),d2>
  141.                 bsr    b1proc
  142.             elseifeq <cmp.l b2Hdl(a5),d2>
  143.                 bsr    b2proc
  144.             elseifeq <cmp.l b3Hdl(a5),d2>
  145.                 bsr    b3proc
  146.             elseifeq <cmp.l b5Hdl(a5),d2>
  147.                 bsr    b5proc
  148.             endif
  149.         endif
  150.     else
  151.         move.l    now_mpt(a5),-(sp)
  152.         move.l    Ttlargc(a5),-(sp)
  153.         pea.l    Sc1work(a5)
  154.         move.w    #5,-(sp)
  155.         SXSUB    ScrProc,14
  156.         move.w    d0,checkingttl(a5)
  157.  
  158.         ifge    <tst.w    d0>
  159.             HDL2PTR    PrgHdl(a5),a0
  160.             iflt    <cmpi.w    #100,(a0)>    *100未満なら
  161.                 addi.w    #1,(a0)        *登録曲数1増やして
  162.                 move.w    (a0),d0        *曲数取りだし
  163.                 move.w    d0,d1        *d1=表示領域チェック用
  164.                 addq.w    #1,d0        *offset変更
  165.                 add.w    d0,a0        *登録位置変更
  166.                 moveq    #0,d0
  167.                 move.b    checkingttl+1(a5),d0
  168.                 addq.b    #1,d0
  169.                 move.b    d0,(a0)        *曲番号セット
  170. .xref    DrawWin2
  171.                 ifgt    <cmp.w    #10,d1>
  172.                     add.l    #4,PrgstrPtr(a5)
  173.                 endif
  174.                 jbsr    DrawWin2    *PRG番号描画
  175. *                moveq    #0,d1
  176. *                move.b    checkingttl+1(a5),d1
  177. *                addq.l    #1,d1
  178. *                moveq    #-1,d2
  179. *                CDC    _CDC_PROGIN
  180.             endif
  181.         endif
  182.     endif
  183. CC2_end:
  184.         movem.l    (sp)+,d1-d2
  185.         rts
  186. CC2_err:
  187.         movem.l    (sp)+,d1-d2
  188.         ~F
  189.         rts
  190. *------------------------------------------------------*
  191. b1proc:                            *選択中の曲をダイレクトに演奏
  192.     ifne <cmpi.w #-1,checkingttl(a5)>
  193.         moveq    #1,d1
  194.         add.w    checkingttl(a5),d1
  195.         moveq    #-1,d2
  196.         CDC    _CDC_PLAY
  197.     endif
  198.     ~T
  199.     rts
  200. b2proc:
  201.     CDC    _CDC_PROG
  202.     move.l    d0,a0
  203.     HDL2PTR    PrgHdl(a5),a1
  204.     move.l    #25-1,d0
  205. @@:
  206.     move.l    (a1)+,(a0)+
  207.     dbra    d0,@b
  208.     move.w    (a1),(a0)
  209.  
  210.     CDC    _CDC_PROG            *プログラム送信
  211.     ~T
  212.     rts
  213. b3proc:                        *一曲取消
  214.     HDL2PTR    PrgHdl(a5),a0
  215.     ifgt    <tst.w    (a0)>
  216.         move.w    (a0),d0
  217.         addq.w    #2,d0
  218.         sub.w    #1,(a0)
  219.         add.w    d0,a0
  220.         move.b    #0,(a0)
  221.  
  222.         HDL2PTR    PrgHdl(a5),a1
  223.         moveq    #0,d1
  224.         move.w    (a1),d1
  225.         move.l    d1,d0
  226.         sub.w    #10,d1
  227.         ifge    <cmp.w    #10,d0>
  228.             sub.l    #4,PrgstrPtr(a5)
  229.             move.l    PrgstrPtr(a5),d0
  230.             lsr.w    #2,d0
  231.                 ifgt    <cmp.w    d1,d0>
  232.                     add.l    #4,PrgstrPtr(a5)
  233.                 endif
  234.         else
  235.             move.l    #0,PrgstrPtr(a5)
  236.         endif
  237.     jbsr    DrawWin2
  238.  
  239. *    CDC    _CDC_PROGOUT
  240.  
  241.     endif
  242.     ~T
  243.     rts
  244. b5proc:
  245.     move.l    #0,PrgstrPtr(a5)
  246.  
  247.     HDL2PTR    PrgHdl(a5),a0
  248. *    move.w    #0,(a0)
  249. **                    *PRGメモリの消去
  250.     moveq.l    #25-1,d1
  251.     moveq.l    #0,d0
  252. @@:
  253.     move.l    d0,(a0)+
  254.     dbra    d1,@b
  255.     move.w    d0,(a0)
  256. **
  257.     jbsr    DrawWin2
  258.  
  259. *    CDC    _CDC_PROG
  260. *    move.l    d0,a0
  261. *    move.w    #0,(a0)            *CDCのPRG消去
  262. *    CDC    _CDC_PROG
  263.     ~T
  264.     rts
  265.  
  266. *------------------------------------------------------*
  267. *●ライトダウン時
  268. *------------------------------------------------------*
  269. MSRDproc::
  270.     rts
  271. *------------------------------------------------------*
  272. *●キー入力時
  273. *------------------------------------------------------*
  274. KEYDproc::
  275.         tst.b    winActive(a5)
  276.         beq    @f
  277.  
  278.     jbsr    InitGraph
  279.     move.w    eventRec_whom1(a5),d0
  280.  
  281.     ifeq    <cmp.w    #K_LEFT,d0>        *カーソル左
  282.         HDL2PTR    PrgHdl(a5),a1
  283.         move.w    (a1),d0
  284.         ifge    <cmp.w    #10,d0>
  285.             ifmi    <sub.l    #4,PrgstrPtr(a5)>
  286.                 move.l    #0,PrgstrPtr(a5)
  287.             else
  288.                 jbsr    DrawWin2
  289.             endif
  290.         endif
  291.     elseifeq <cmp.w    #K_RIGHT,d0>        *カーソル右
  292.         HDL2PTR    PrgHdl(a5),a1
  293.         moveq    #0,d1
  294.         move.w    (a1),d1
  295.         move.l    d1,d0
  296.         sub.w    #10,d1
  297.         ifge    <cmp.w    #10,d0>
  298.             add.l    #4,PrgstrPtr(a5)
  299.             move.l    PrgstrPtr(a5),d0
  300.             lsr.w    #2,d0
  301.                 ifgt    <cmp.w    d1,d0>
  302.                     sub.l    #4,PrgstrPtr(a5)
  303.                 else
  304.                     jbsr    DrawWin2
  305.                 endif
  306.         else
  307.             move.l    #0,PrgstrPtr(a5)
  308.         endif
  309.     elseifeq <cmp.w    #K_BS,d0>        *カーソル右
  310.         bsr    b3proc
  311.     else                *それ以外
  312. *        pea    eventRec(a5)
  313. *        move.w    #EM_MSTOKEY,-(sp)
  314. *        SX    __TSGetEvent,6
  315.  
  316.         move.l    eventRec_whom1(a5),-(sp)
  317.         pea    Sc1work(a5)
  318.         move.w    #4,-(sp)        *キーでのスクロールをコントロール
  319.         SXSUB    ScrProc,10
  320.  
  321.     endif
  322. *        move.w    #0,-(sp)
  323. *        move.w    #%100000,-(sp)        *キーダウンフラッシュ
  324. *        SX    __EMClean,4
  325.  
  326. @@:
  327.     ~T
  328.     rts
  329. *------------------------------------------------------*
  330. *●アップデート処理
  331. *------------------------------------------------------*
  332. .if    WINCOUNT>=1
  333. UPDTproc::
  334.     jbsr    InitGraph
  335.  
  336.     jbsr    DrawWin
  337.     jbsr    DrawWin2
  338.  
  339.     ~T
  340.     rts
  341. .endif
  342. *------------------------------------------------------*
  343. *●アクティベート処理
  344. *ウィンドウのアクティブフラグは立ててあるので
  345. *特にやることはない
  346. *------------------------------------------------------*
  347. ACTproc::
  348.  
  349. rts
  350. *------------------------------------------------------*
  351. SYSproc::
  352.     ifeq    <cmp.w    #1025,d0>
  353.         ~F            *おしまい
  354.         rts
  355.     endif
  356. ~T
  357. rts
  358. *------------------------------------------------------*
  359. *●変数などの初期化部
  360. *リソースオープン処理部は消さないこと
  361. LBName:        dc.b    'CDCSX.LB',0
  362. .even
  363. *------------------------------------------------------*
  364. Initproc::
  365. .iff    USE_RES=0
  366. .xref    MYResOpen
  367.     pea.l    LBName(pc)
  368.     SXSUB    MYResOpen,4
  369. .endif
  370.  
  371.     move.w    #13,eventCom+tnWhat(a5)
  372.     SX    __EMSysTime,0
  373.     move.l    d0,eventCom+tnWhen(a5)
  374.     move.w    #1024,eventCom+tnWhat2(a5)
  375.     move.w    taskID(a5),eventCom+tnTaskID(a5)
  376.  
  377.     pea.l    eventCom(a5)
  378.     move.w    ParID(a5),-(sp)
  379.     SX    __TSSendMes,6
  380.     ifeq    <cmp.l    #2,d0>
  381.     move.l    eventCom+tnWhom(a5),PrgHdl(a5)
  382.     endif
  383.  
  384.  
  385.     CDC    _CDC_TRACKS
  386.     move.l    d0,a0
  387.     move.l    2(a0),TRACKmax(a5)    *トラック最大数
  388.  
  389.     move.w    #-1,checkingttl(a5)
  390.     ~T
  391.     rts
  392. *------------------------------------------------------*
  393. *●INITprocで確保したメモリなどを廃棄
  394. *------------------------------------------------------*
  395. TINIproc::
  396.  
  397.     ~T
  398.     rts
  399.  
  400. .end
  401.